

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
    if (!nums || nums.length === 0) return 0

    // set 既然最长连续 相同的需要过滤
    const numSet = new Set(nums)

    // 定义最终长度变量
    let numLength = 0

    // 有序 for of
    for(const num of numSet) {

        // 需要用set 去找 num - 1是否存在
        if (!numSet.has(num - 1)) {
            let current = num
            let numStart = 1

            // 无限查看是否 当前 + 1是否在 序中存在
            while(numSet.has(current + 1)){
                current += 1
                numStart += 1
            }
            numLength = Math.max(numLength, numStart)
        }
    }
    return numLength
};

// 最长连续序列
console.log(longestConsecutive([100, 4, 200, 1, 3, 2, 1, 1])); // 输出: 4

// 最长连续子串
/**
 * @param {string} str
 * @return {number}
 */
function longestConsecutiveSubstring(str) {
    if (str.length === 0) return 0; // 如果字符串为空，返回 0
    
    let longestStreak = 1; // 最长连续序列长度
    let currentStreak = 1; // 当前连续序列长度

    // 遍历整个字符串
    for (let i = 1; i < str.length; i++) {
        // 如果当前字符比前一个字符按字母顺序连续递增
        if (str.charCodeAt(i) === str.charCodeAt(i - 1) + 1) {
            currentStreak++; // 当前连续序列增加
            longestStreak = Math.max(longestStreak, currentStreak); // 更新最长序列
        } else {
            currentStreak = 1; // 不连续时重置当前序列
        }
    }

    return longestStreak;
}

console.log(longestConsecutiveSubstring('abcdefgabcbb'));